﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using blackhouse.BlackApart.Business.ApartmentServices;
using blackhouse.BlackApart.Business.Payments;
using blackhouse.BlackApart.Business.Prices;

namespace blackhouse.BlackApart.Business.Reservations {

    public interface IWebReservation {

        int ReservationId { get; }
        string ReservationNumber { get; }
        DateTime ArrivalDate { get; }
        DateTime DepartureDate { get; }
        /// <summary>
        /// Cena za apartament
        /// </summary>
        double Price { get; }
        /// <summary>
        /// Cena z uwzględnieniem rabatów
        /// </summary>
        double FinalPrice { get; }
        float Rabat { get; }
        bool VatInvoice { get; set; }
        ReservationStatus Status { get; }
        Guid Guid { get; }
        ApartmentWebReservation[] ApartmentReservation { get; }
        ReservationPriceRabat[] ReservationRabats { get; }
        string Comments { get; set; }
        string OfficeComments { get; }
        IClient Client { get; }
        IPaymentType PaymentType { get; }
        int PersonCount { get; }

        bool AddApartment(int apartmentId, int forPeoples);
        void AddPriceRabat(IPriceRabat rabat);
        void AddPriceRabat(IPriceRabat rabat, float overrideRabat);
        void SetDates(DateTime arrivalDate, DateTime departureDate);
        void SetArrivalTime(TimeSpan arrivalTime);
        void SetPrice(IApartmentPrice price);
        void SetClient(IClient client);
        void SetPaymentType(IPaymentType paymentType);
        void ChangeStatus(string newStatusKey);
        bool Save();
        void RemoveOpenReservation();
        void Remove();

    }

}
